<?php

    /**

     * Created by JetBrains PhpStorm.

     * User: taoqili

     * Date: 11-12-28

     * Time: 上午9:54

     * To change this template use File | Settings | File Templates.

     */

    header("Content-Type: text/html; charset=utf-8");

    error_reporting(E_ERROR|E_WARNING);

    //远程抓取图片配置

    $config = array(

        "savePath" => "upload/" ,            //保存路径

        "allowFiles" => array( ".gif" , ".png" , ".jpg" , ".jpeg" , ".bmp" ) , //文件允许格式

        "maxSize" => 3000                    //文件大小限制，单位KB

    );

    $uri = htmlspecialchars( $_POST[ 'upfile' ] );

    $uri = str_replace( "&amp;" , "&" , $uri );

    getRemoteImage( $uri,$config );



    /**

     * 远程抓取

     * @param $uri

     * @param $config

     */

    function getRemoteImage( $uri,$config)

    {

        //忽略抓取时间限制

        set_time_limit( 0 );

        //ue_separate_ue  ue用于传递数据分割符号

        $imgUrls = explode( "ue_separate_ue" , $uri );

        $tmpNames = array();

        foreach ( $imgUrls as $imgUrl ) {

            //http开头验证

            if(strpos($imgUrl,"http")!==0){

                array_push( $tmpNames , "error" );

                continue;

            }

            //获取请求头

            $heads = get_headers( $imgUrl );

            //死链检测

            if ( !( stristr( $heads[ 0 ] , "200" ) && stristr( $heads[ 0 ] , "OK" ) ) ) {

                array_push( $tmpNames , "error" );

                continue;

            }



            //格式验证(扩展名验证和Content-Type验证)

            $fileType = strtolower( strrchr( $imgUrl , '.' ) );

            if ( !in_array( $fileType , $config[ 'allowFiles' ] ) || stristr( $heads[ 'Content-Type' ] , "image" ) ) {

                array_push( $tmpNames , "error" );

                continue;

            }



            //打开输出缓冲区并获取远程图片

            ob_start();

            $context = stream_context_create(

                array (

                    'http' => array (

                        'follow_location' => false // don't follow redirects

                    )

                )

            );

            //请确保php.ini中的fopen wrappers已经激活

            readfile( $imgUrl,false,$context);

            $img = ob_get_contents();

            ob_end_clean();



            //大小验证

            $uriSize = strlen( $img ); //得到图片大小

            $allowSize = 1024 * $config[ 'maxSize' ];

            if ( $uriSize > $allowSize ) {

                array_push( $tmpNames , "error" );

                continue;

            }

            //创建保存位置

            $savePath = $config[ 'savePath' ];

            if ( !file_exists( $savePath ) ) {

                mkdir( "$savePath" , 0777 );

            }

            //写入文件

            $tmpName = $savePath . rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );

            try {

                $fp2 = @fopen( $tmpName , "a" );

                fwrite( $fp2 , $img );

                fclose( $fp2 );

                array_push( $tmpNames ,  $tmpName );

            } catch ( Exception $e ) {

                array_push( $tmpNames , "error" );

            }

        }

        /**

         * 返回数据格式

         * {

         *   'url'   : '新地址一ue_separate_ue新地址二ue_separate_ue新地址三',

         *   'srcUrl': '原始地址一ue_separate_ue原始地址二ue_separate_ue原始地址三'，

         *   'tip'   : '状态提示'

         * }

         */

        echo "{'url':'" . implode( "ue_separate_ue" , $tmpNames ) . "','tip':'远程图片抓取成功！','srcUrl':'" . $uri . "'}";

    }